package java学习.第08章_面向对象编程_高级;

/**
 * ClassName: A_static的使用
 * Package: java学习.第08章_面向对象编程_高级
 * Description:
 *
 * @Author 张蛟龙
 * @Create 2023/3/10 17:16
 * @Version 1.0
 */
public class A_static的使用 {
    /**
     * static 静态的
     * 我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下，
     * 某些特定的数据在内存空间里只有一份。
     *
     * static 这些修饰的都把这些数据放在一个 静态域 中
     *      JKD6 放在方法区中
     *      JDK7 放在堆中
     * 有这个 static，是随着类加载而加载，而类只加载一次，
     *              所以，静态变量只有一份
     *           可以直接用 类.属性/方法  直接调用
     *
     * 静态方法可以调用静态的方法，不能调用非静态方法
     * 非静态方法 可以调用静态方法 也可以调用非静态方法
     *
     * 静态方法 不能使用this/super 因为this表示本对象 但是静态比对象还早
     *      如果此方法操作的变量都是静态变量
     *              工具类等   都会声明成静态方法
     *
     */
    public static void main(String[] args) {
        Chinese s1 = new Chinese();
        Chinese s2 = new Chinese();
        System.out.println(s1.nation);//中国
        System.out.println(s2.nation);//中国
        s1.nation = "China";
        System.out.println(s1.nation);//China
        System.out.println(s2.nation);//China
        //此变量只有一份
        System.out.println(s1.nation == s2.nation);//true
    }
}

class Chinese {
    /**
     * 成员变量
     * 静态变量(加 static)，实例变量
     * 局部变量：
     * 方法内，方法形参，构造器内，构造器形参，代码块
     */
    //此属性只有这一个，所有对象共用
    static String nation = "中国";

}
